﻿using System.Collections.Generic;

namespace LL.Common
{
    public interface IConditionGroup : ICondition
    {


        int Count { get; }

        IEnumerable<ICondition> Conditions { get; }

        /// <summary>
        /// 在列表中新增一个组元素并返回
        /// </summary>
        IConditionGroup AndGroup();

        IConditionGroup OrGroup();

        /// <summary>
        /// 在列表中新增一个组元素并在新组元素中添加一个条件元素，返回新组元素
        /// </summary>
        /// <param name="condition"></param>
        /// <returns></returns>
        IConditionGroup AndGroup(IConditionItem condition);

        /// <summary>
        /// 在列表中新增一个组元素并在新组元素中添加一个条件元素，返回新组元素
        /// </summary>
        /// <param name="condition"></param>
        /// <returns></returns>
        IConditionGroup OrGroup(IConditionItem condition);

        /// <summary>
        /// 返回当前所在的组元素（Parent）
        /// </summary>
        /// <returns></returns>
        IConditionGroup EndGroup();

        /// <summary>
        /// 在列表中新增一个AND条件元素
        /// </summary>
        /// <param name="condition"></param>
        /// <returns></returns>
        IConditionGroup And(IConditionItem condition);

        /// <summary>
        /// 在列表中新增一个OR条件元素
        /// </summary>
        /// <param name="condition"></param>
        /// <returns></returns>
        IConditionGroup Or(IConditionItem condition);

    }
}